import time

from flask import request, jsonify
from flask_script import Manager,Server
from flask_migrate import Migrate,MigrateCommand
from app import db,app
from application.tools.myjwt import mjwt


#注册蓝图
# 账户蓝图注册
from application.views.users.user import user_blue
app.register_blueprint(user_blue, url_prefix='/user')
# 课程蓝图注册
from application.views.course.course import course_blue
app.register_blueprint(course_blue, url_prefix='/course')
# 评论蓝图注册
from application.views.comment.comment import comment_blue
app.register_blueprint(comment_blue, url_prefix='/comment')
# 订单蓝图注册
from application.views.order.order import order_blue
app.register_blueprint(order_blue, url_prefix='/order')



# 生成管理工具对象
manager = Manager(app)
# 添加服务器运行指令
manager.add_command("runserver",  Server(host='0.0.0.0', use_debugger=True))

# 数据库迁移
Migrate(app=app, db=db)
# 添加数据库的操作指令
manager.add_command("db", MigrateCommand)

# 调用before_request是在请求之前对这个接口进行校验
# @app.before_request
# def before_request():
#     # 设置一个白名单，白名单是一个列表，列表里面有的数据就不需要进行token验证，如果没有就进行验证是否存在token
#     whitelist = ['/user/getcode', '/user/sendSmsCode', '/user/login']
#     # 获取前端访问的url
#     url = request.path
#     print('url================================', url)
#     # 判断访问的接口是否存在白名单
#     if url not in whitelist:
#         # 从接口headers中获取token
#         try:
#             token = request.headers.get('token')
#             print('token================================', token)
#             # 调用封装好的jwt进行对比
#             flag = mjwt.check_token(token)
#             if flag == True:
#                 # 如果通过就验证token是否过期
#                 # 调用封装好的jwt进行解密
#                 payload = mjwt.jwt_decode(token)
#                 # 获取现在的时间
#                 now = time.time()
#                 # 获取token存入的有效期
#                 tnow = payload['data']['exp']
#                 # 判断token是否过期
#                 if int(now)-int(tnow) > 3:
#                     # 如果过期就返回用户登录信息过期
#
#                     return jsonify({'code': '203', 'msg': '用户登录信息已过期'})
#             else:
#                 return jsonify({'code': '202', 'msg': 'token已经篡改'})
#         except:
#             return jsonify({'code': '201', 'msg': 'token不存在'})

#如果是以此脚本作为主脚本程序，就执行
if __name__ == '__main__':
    # manager.run()
    app.run(port=8000)